home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
COMAL
/
Z-Misc Series
/
(k)zc.d64
/
envelope.l
< prev
next >
Wrap
Text File
|
2007-03-01
|
3KB
|
142 lines
0010 // PROGRAM:
0020 // LIST "@:ENVELOPE.14.L"
0030 //
0040 //
0050 //
0060 // PROCEDURES TBV GELUID IN
0070 // CBM COMAL-80 VS 0.14
0080 // OVEREENKOMEND MET DIE IN VS 2.0
0090 //
0100 //
0110 PROC ADSR(STEM,A,D,S,R)
0120 P:=5+(STEM-1)*7
0130 POKE SID+P,A*16+D
0140 POKE SID+P+1,S*16+R
0150 ENDPROC ADSR
0160 //
0170 PROC VOLUME(STERKTE)
0180 POKE SID+24,STERKTE
0190 ENDPROC VOLUME
0200 //
0210 PROC GATE(STEM,JN)
0220 P:=4+(STEM-1)*7
0230 W:=CONTROL(STEM)
0240 IF JN THEN
0250 W:=W-(W MOD 2)+1
0260 ELSE
0270 W:=W-(W MOD 2)
0280 ENDIF
0290 POKE SID+P,W
0300 CONTROL(STEM):=W
0310 ENDPROC GATE
0320 //
0330 PROC SOUNDTYPE(STEM,SRT)
0340 P:=4+(STEM-1)*7
0350 CONTROL(STEM):=2^(SRT+3)
0360 POKE SID+P,CONTROL(STEM)
0370 ENDPROC SOUNDTYPE
0380 //
0390 PROC USE'SOUND
0400 SID:=54272
0410 FOR P:=0 TO 24 DO POKE SID+P,0
0420 //
0430 DIM NOTEN$ OF 3*96, VALUE(0:95)
0440 DIM CONTROL(3)
0450 //
0460 FOR NT:=0 TO 95 DO
0470 READ NOTEN$(NT*3+1:NT*3+3)
0480 ENDFOR NT
0490 //
0500 NR:=-1
0510 FOR OKT:=0 TO 7 DO
0520 RESTORE BASIS
0530 FOR NT:=1 TO 12 DO
0540 NR:+1
0550 READ B
0560 W:=B/2^(7-OKT)
0570 VALUE(NR):=W
0580 ENDFOR NT
0590 ENDFOR OKT
0600 //
0610 NOTENRIJ:
0620 DATA "C0","C0#","D0","D0#","E0","F0","F0#","G0","G0#","A0","A0#","B0"
0630 DATA "C1","C1#","D1","D1#","E1","F1","F1#","G1","G1#","A1","A1#","B1"
0640 DATA "C2","C2#","D2","D2#","E2","F2","F2#","G2","G2#","A2","A2#","B2"
0650 DATA "C3","C3#","D3","D3#","E3","F3","F3#","G3","G3#","A3","A3#","B3"
0660 DATA "C4","C4#","D4","D4#","E4","F4","F4#","G4","G4#","A4","A4#","B4"
0670 DATA "C5","C5#","D5","D5#","E5","F5","F5#","G5","G5#","A5","A5#","B5"
0680 DATA "C6","C6#","D6","D6#","E6","F6","F6#","G6","G6#","A6","A6#","B6"
0690 DATA "C7","C7#","D7","D7#","E7","F7","F7#","G7","G7#","A7","A7#","B7"
0700 BASIS:
0710 DATA 34334,36376,38539,40830
0720 DATA 43258,45830,48556,51443
0730 DATA 54502,57743,61176,64814
0740 //
0750 INIT'VOICES
0760 //
0770 ENDPROC USE'SOUND
0780 //
0790 PROC NOTE(STEM,N$)
0800 NR:=((N$ IN NOTEN$)-1)/3
0810 P:=(STEM-1)*7
0820 POKE SID+P,VALUE(NR) MOD 256
0830 POKE SID+P+1,VALUE(NR) DIV 256
0840 ENDPROC NOTE
0850 //
0860 PROC INIT'VOICES
0870 ADSR(1,0,4,12,10)
0880 ADSR(2,10,8,10,9)
0890 ADSR(3,1,9,1,9)
0900 FOR STEM:=1 TO 3 DO
0910 PULSE(STEM,2048)
0920 SETFREQUENCY(STEM,0)
0930 ENDFOR STEM
0940 VOLUME(15)
0950 SOUNDTYPE(1,1)
0960 SOUNDTYPE(2,2)
0970 SOUNDTYPE(3,3)
0980 ENDPROC INIT'VOICES
0990 //
1000 PROC PULSE(STEM,F)
1010 P:=2+(STEM-1)*7
1020 POKE SID+P,F MOD 256
1030 POKE SID+P+1,F DIV 256
1040 ENDPROC PULSE
1050 //
1060 PROC SETFREQUENCY(STEM,F)
1070 P:=(STEM-1)*7
1080 POKE SID+P,F MOD 256
1090 POKE SID+P+1,F DIV 256
1100 ENDPROC SETFREQUENCY
1110 //
1120 PROC DISCARD
1130 SID:=54272
1140 FOR P:=0 TO 24 DO POKE SID+P,0
1150 ENDPROC DISCARD
1160
1170 USE GRAPHICS
1180 USE'SOUND
1190 GRAPHICSCREEN(0)
1200 VOLUME(10)
1210 SOUNDTYPE(3,1)
1220 ADSR(3,13,13,8,13)
1230 NOTE(3,"A4")
1240 GATE(3,0)
1250 WHILE ENV3<>0 DO NULL
1260 GATE(3,1)
1270 T:=0
1280 WHILE T<600 DO
1290 T:+1
1300 DRAWTO(T/5,ENV3/256*199)
1310 ENDWHILE
1320 GATE(3,0)
1330 WHILE T/5<320 DO
1340 T:+1
1350 DRAWTO(T/5,ENV3/256*199)
1360 ENDWHILE
1370 WHILE KEY$=CHR$(0) DO NULL
1380 DISCARD
1390 FUNC ENV3
1400 RETURN PEEK(SID+28)
1410 ENDFUNC ENV3